// 引入数据模型Schema
const { Vuer } = require('../db/schema');
// 引入密钥
const globalKeys = require('./globalKeys');
// 因为jwt生成token,现在通过这个插件验证token
const { Strategy: JwtStrategy, ExtractJwt } = require('passport-jwt');
const opts = {}
// 通过请求得到的token
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
// 密钥
opts.secretOrKey = globalKeys.secretOrKeyOfJWT;


module.exports = passport => {
  passport.use(new JwtStrategy(opts, async (jwt_payload, done) => {
    
    /**console.log(jwt_payload): 
     * 发现第一个参数就是我们在登录时jwt存储的第一个参数内的内容加上创建时间及过期时间
     * {
     *  phone: '13122223333',// jwt定义的第一个参数内的字段
     *  time: 1589952974013,// jwt定义的第一个参数内的字段
     *  iat: 1589952974, // 创建时间
     *  exp: 1589996174 // 过期时间
     * }
     */
    Vuer.findOne({ phone: jwt_payload.phone }, { _id: 0, __v: 0, password: 0 }, async (err, user) => {
      if (err) {
        return done(err, false);
      }
      if (user) {
        // user就是Vuer查询的结果
        // { "username": "","avatar": "","userid": "","phone": "","uid": 2,"member": "","createTime": "Z" }
        /**
          * 验证成功: 将通过数据库查询的个人信息通过done回调返回给私密接口的ctx.state.user上
          * 每一个设置为私密接口的路由在验证成功的情况下都可以通过ctx得到用户的信息,便于增删改查的使用 
          */
        return done(null, user);
      } else {
        return done(null, false);
        // 没有验证成功: Method Not Allowed
        // or you could create a new account
      }
    });
  }));
}
